package com.lww.feature.test.thread.cyclicbarrier;

import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CyclicBarrierDemo {
    public static void main(String[] args) throws InterruptedException {
        // 开始比赛
        Competition c = new Competition();
        // 建立一个线程池.
        ExecutorService exec = Executors.newCachedThreadPool();
        // 创建一个循环障碍锁对象。总数是5次，且当障碍锁条件满足时，运行比赛实例c的run方法.
        CyclicBarrier cb = new CyclicBarrier(5, c);
        int j = 0;
        // 总共进行二场比赛
        while (j < 2) {
            for (int i = 0; i < 5; i++)
                exec.execute(new Horse(cb, String.valueOf(i)));
            j++;
            // 循环利用障碍锁。等待第一场比赛结束后，继续进行下一场比赛
//            Thread.sleep(5000);
            System.out.println("开始下一场比赛");
        }
        // 线程全部执行完毕后结束掉线程。
        exec.shutdown();
    }
}